﻿package com.javaPattern.Memento;

public class Originator {
	// 这是要保存的状态
	private int state = 90;
	private Caretaker c = new Caretaker();

	// 创建一个备忘录角色，并将当前状态属性存入，托给备忘录管理者角色”存放。
	public void creatMemento() {
		c.saveMemento(new Memento(state));
	}

	// 改变状态
	public void modifyStateTest(int m) {
		state = m;
		System.out.println("the state is " + state);
	}

	// 读取备忘录角色以恢复以前的状态
	public void setMemento() {
		Memento memento = (Memento) c.getMemento();
		state = memento.getState();
		System.out.println("the state is " + state);
	}

	// 作为私有内部类的备忘录角色，它实现了窄接口，在Caretaker中这个Memento是不可见的
	// 所以只能用构造方法来代替setState()
	// 注意：里面的属性和方法都是私有的
	private class Memento implements MementoIF {
		private int state;

		private Memento(int state) {
			this.state = state;
		}

		private int getState() {
			return state;
		}

	}
}
